package edu.sias.hyzn.service.impl;

import java.util.List;

import edu.sias.hyzn.domain.Visit;
import edu.sias.hyzn.mapper.VisitMapper;
import edu.sias.hyzn.vo.EyeAnalysisResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.sias.hyzn.mapper.PatientMapper;
import edu.sias.hyzn.domain.Patient;
import edu.sias.hyzn.service.IPatientService;

/**
 * 患者信息Service业务层处理
 * 
 * @author Ailzr
 * @date 2025-03-18
 */
@Service
public class PatientServiceImpl implements IPatientService 
{
    @Autowired
    private PatientMapper patientMapper;
    @Autowired
    private VisitMapper visitMapper;

    /**
     * 查询患者信息
     * 
     * @param id 患者信息主键
     * @return 患者信息
     */
    @Override
    public Patient selectPatientById(Long id)
    {
        return patientMapper.selectPatientById(id);
    }

    /**
     * 查询患者信息列表
     * 
     * @param patient 患者信息
     * @return 患者信息
     */
    @Override
    public List<EyeAnalysisResult> selectPatientList(Patient patient, Integer status)
    {
        return patientMapper.selectPatientList(patient, status);
    }

    /**
     * 新增患者信息
     * 
     * @param patient 患者信息
     * @return 结果
     */
    @Override
    public Long insertPatient(Patient patient)
    {
        Patient findPatient = patientMapper.selectPatientByIdCardNumber(patient.getIdCardNumber());
        if (findPatient != null){
            return -1L;
        }
        patientMapper.insertPatient(patient);
        return patient.getId();
    }

    /**
     * 修改患者信息
     * 
     * @param patient 患者信息
     * @return 结果
     */
    @Override
    public int updatePatient(Patient patient)
    {
        //根据身份证号查询患者信息是否存在
        Patient findPatient = patientMapper.selectPatientByIdCardNumber(patient.getIdCardNumber());
        //如果存在，则更新
        if (findPatient != null){
            patient.setId(findPatient.getId());
            return patientMapper.updatePatient(patient);
        }
        //如果不存在,则新增
        patient.setId(null);
        //这里mapper会将插入后新增的id保存到patient中
        patientMapper.insertPatient(patient);
        //将visit绑定到对应的patient
        Visit visit = visitMapper.selectVisitById(patient.getVisitId());
        visit.setPatientId(patient.getId());
        visit.setRemark(patient.getRemark());
        //更新对应的visit
        visitMapper.updateVisit(visit);
        return patientMapper.updatePatient(patient);
    }

    @Override
    public int deleteVisitByIds(Long[] ids) {
        return visitMapper.deleteVisitByIds(ids);
    }

    @Override
    public int deleteVisitById(Long id) {
        return visitMapper.deleteVisitById(id);
    }

//    /**
//     * 批量删除患者信息
//     *
//     * @param ids 需要删除的患者信息主键
//     * @return 结果
//     */
//    @Override
//    public int deletePatientByIds(Long[] ids)
//    {
//        return patientMapper.deletePatientByIds(ids);
//    }
//
//    /**
//     * 删除患者信息信息
//     *
//     * @param id 患者信息主键
//     * @return 结果
//     */
//    @Override
//    public int deletePatientById(Long id)
//    {
//        return patientMapper.deletePatientById(id);
//    }

    @Override
    public EyeAnalysisResult selectVisitById(Long visit_id) {
        return patientMapper.selectVisitById(visit_id);
    }

    @Override
    public List<Patient> selectPatientInfoList(Patient patient) {
        return patientMapper.selectPatientInfoList(patient);
    }
}
